package stores;

import java.sql.*;
import java.util.Vector;

import models.Agenda;
import models.Dia_Semana;
import models.Odontologo;
import models.Sistema;

public class Dao_Agendas {
	private Sistema sist= Sistema.getInstancia();
	private Dao_connection unicaConeccion= Dao_connection.getInstancia();
	private Dao_Turnos dbTurnos;
	public Dao_Agendas(){
		dbTurnos= new Dao_Turnos();
	}
	
	public boolean insertarAgenda(Agenda a)
	{
		boolean validar=true;
		try{
			java.sql.Date sqlFechaDesde= new java.sql.Date (a.getFechaDesde().getTime());
			java.sql.Date sqlFechaHasta= new java.sql.Date (a.getFechaHasta().getTime());
			Connection connection = unicaConeccion.getConnection();
			String query = "INSERT INTO Agenda (fecha_desde, fecha_hasta, #Mat) VALUES (?,?,?)"; // HAY QUE BORRAR descripcion DE LA BASE DE DATOS
			PreparedStatement stmt = connection.prepareStatement(query);
			stmt.setDate(1,  sqlFechaDesde);
			stmt.setDate(2,  sqlFechaHasta);
			stmt.setString(3, sist.getOdontologoActual().getMatricula());
		
			stmt.execute();
			connection.close();
		}
		catch(SQLException e){
			e.printStackTrace();
			validar=false;
		}
		catch(Exception e){
			e.printStackTrace();
			validar=false;
		}
		if(validar){
			insertarDiaSemana(a, "lunes");
			insertarDiaSemana(a, "martes");
			insertarDiaSemana(a, "miercoles");
			insertarDiaSemana(a, "jueves");
			insertarDiaSemana(a, "viernes");
			insertarDiaSemana(a, "sabado");
			insertarDiaSemana(a, "domingo");
		}
		return validar;
	}
	
	public void insertarDiaSemana(Agenda a, String dia)
	{
		try{
			java.sql.Date sqlFechaDesde= new java.sql.Date (a.getFechaDesde().getTime());
			System.out.println("hola: " + sqlFechaDesde);
			java.sql.Date sqlFechaHasta= new java.sql.Date (a.getFechaHasta().getTime());
			Connection connection = unicaConeccion.getConnection();
			
			String query = "INSERT INTO Dia_semana (Nombre,horario_inicial,horario_final,fecuencia,dia_laboral,fecha_desde,fecha_hasta,#Mat) VALUES " +
					"(?,?,?,?,?,?,?,?)";
			PreparedStatement stmt = connection.prepareStatement(query);			
			stmt.setString(1,dia);
			stmt.setDate(2,null);
			stmt.setDate(3,null);
			stmt.setFloat(4,0);
			stmt.setInt(5,0);
			stmt.setDate(6, sqlFechaDesde);
			stmt.setDate(7, sqlFechaHasta);
			stmt.setString(8,sist.getOdontologoActual().getMatricula());
			stmt.execute();			
		}
		catch(SQLException e){
			e.printStackTrace();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}

	public Vector<Dia_Semana> getDiasSemana(Agenda a) {
		Vector<Dia_Semana> diasSemana= new Vector<Dia_Semana> ();
		try {
			java.sql.Date sqlFechaDesde= new java.sql.Date (a.getFechaDesde().getTime());
			java.sql.Date sqlFechaHasta= new java.sql.Date (a.getFechaHasta().getTime());
		
		
			Connection connection = unicaConeccion.getConnection();
			Statement stmt = connection.createStatement();
			String query1 = "SELECT * FROM dia_semana where fecha_Desde= '"+
			sqlFechaDesde +"' and Fecha_Hasta= '" + sqlFechaHasta +"' and #mat='" +Sistema.getInstancia().getOdontologoActual().getMatricula()+"'"  ;
			
			
			System.out.println("query ... "+ query1);
		
			
			ResultSet rs = stmt.executeQuery(query1);
			while(rs.next()){
				Time hInicial;
				Time hFinal;
				String nombre= rs.getString("nombre");
				if(rs.getString("horario_inicial") != null){
					System.out.println("error: "+rs.getString("horario_inicial"));
					String hora= rs.getString("horario_inicial").substring(0, rs.getString("horario_inicial").indexOf(":"));
					System.out.println(hora);
					String minutos= rs.getString("horario_inicial").substring(rs.getString("horario_inicial").indexOf(":")+1,rs.getString("horario_inicial").indexOf(":") + 3);
					System.out.println(minutos);
					hInicial= new Time(Integer.parseInt(hora), Integer.parseInt(minutos) ,0);
					System.out.println("hinicial " + hInicial);
					String horaf= rs.getString("horario_final").substring(0, rs.getString("horario_final").indexOf(":"));
					System.out.println(hora);
					
					String minutosf= rs.getString("horario_final").substring(rs.getString("horario_final").indexOf(":")+1,rs.getString("horario_final").indexOf(":") + 3);
					System.out.println(minutosf);
					hFinal= new Time (Integer.parseInt(horaf),Integer.parseInt(minutosf), 0);
					System.out.println("final : " + hFinal);
				}
				else{
					hInicial= rs.getTime("horario_inicial");
					hFinal= rs.getTime("horario_final");		
				}
				
				float frecuencia= rs.getFloat("fecuencia");
				boolean diaLaboral=false;
				if(rs.getInt("dia_laboral") == 1)
				{
					diaLaboral=true;
				}
				if(hInicial==null || hFinal == null)
				{
					Dia_Semana nuevo= new Dia_Semana(nombre,null,
							null, frecuencia, diaLaboral);
					System.out.println("nombre del nuevo: " + nuevo.getNombre());
					diasSemana.add(nuevo);
				}
				else
				{
					
					Dia_Semana nuevo= new Dia_Semana(nombre,hInicial,
							hFinal, frecuencia, diaLaboral);
					System.out.println("nombre del nuevo: " + nuevo.getNombre());
					diasSemana.add(nuevo);
				}

			}
			connection.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		
		return diasSemana;
	}

	public void actualizarConfiguracionDia(Agenda a, Dia_Semana diaActual, Odontologo odontologo) {
		// TODO Auto-generated method stub
		java.sql.Date sqlFechaDesde= new java.sql.Date (a.getFechaDesde().getTime());
		java.sql.Date sqlFechaHasta= new java.sql.Date (a.getFechaHasta().getTime());
		
		int diaLaboral;
		if(diaActual.isEsLaboral())
		{
			diaLaboral=1;
		}
		else
			diaLaboral=0;
		
		try{
			Connection connection = unicaConeccion.getConnection();
			String query1 = "UPDATE dia_semana set horario_inicial= '"+ diaActual.getHorarioInicial()+ "' , horario_final= '"+
			diaActual.getHorarioFinal() +"' , fecuencia= "+ diaActual.getFrecuencia() + ", dia_Laboral= " + diaLaboral + " where fecha_Desde= '"+
			 sqlFechaDesde  + "'  and Fecha_Hasta= '"+ sqlFechaHasta +"' and #mat= '"+ odontologo.getMatricula() +"' and nombre= '"+
			 diaActual.getNombre()+"' ";
			System.out.println("levantar dia modificado..."+query1);
			PreparedStatement stmt = connection.prepareStatement(query1);

			System.out.println("ejecuta?" + stmt.execute());
			
			connection.close();
			dbTurnos.inicializarTurnos(diaActual, odontologo.getMatricula(), a);
		}catch(SQLException e){
			e.printStackTrace();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}

	public Vector<Agenda> getAgendas(String matricula) {
		Vector <Agenda> agendas= new Vector <Agenda>();
		try {
			Connection connection = unicaConeccion.getConnection();
			Statement stmt = connection.createStatement();
			String query1 = "SELECT * FROM Agenda where #mat= '"+matricula +"' ";
			
			System.out.println("query ... "+ query1);
		
			
			ResultSet rs = stmt.executeQuery(query1);
			while(rs.next()){
				java.sql.Date fechaD= rs.getDate("Fecha_desde");
				java.sql.Date fechaH= rs.getDate("Fecha_hasta"); 
				java.util.Date fechaDesde = new java.util.Date (fechaD.getTime());
				java.util.Date fechaHasta = new java.util.Date (fechaH.getTime());
				
				Agenda nueva= new Agenda (fechaDesde, fechaHasta);
				agendas.add(nueva);
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
		catch(Exception e){
			e.printStackTrace();
		}
			
		
		return agendas;
	}
	
	

	

}
